#!/usr/bin/env python3.6
# coding:utf-8
import os
import pytest
import time
import shutil
from Common.public.sendmail import send_mails
from argparse import ArgumentParser

from Common import logger_config, Config


def run(period):
    cfg = Config.CONFIG_PATH

    # 重写config.ini中的period
    Config.period = period

    start_runtime = time.time()
    report_time = time.strftime('%Y-%m-%d', time.localtime(start_runtime))

    # allure报告路径
    result = Config.result
    html = Config.html

    # log设置路径
    logpath = f'project/{period}/Log/{report_time}/'
    if not os.path.exists(logpath):
        os.mkdir(logpath)
    logger_config(logpath)  # 设置日志

    # 设置存放allure--result路径
    result_path = f'project/{period}/Report/{result}'
    # 设置存放allure--报告路径
    html_path = f'project/{period}/Report/{html}'
    time.sleep(5)

    pytest.main([
                 "-c", cfg,
                 "--rootdir", Config.BASE_DIR,
                 "--alluredir", result_path, "--clean-alluredir"])
    '''
    -s 显示程序中的print/logging输出
    -v 详细信息模式,输出详细的用例执行信息
    -c 设置指定的.ini文件(pytest默认使用脚跟根目录pytest.ini),参数后面指定.ini文件路径,同时若未指定rootdir则使用当前路径
    --rootdir 设置项目运行的跟目录
    --alluredir 设置allure报告的result路径
    '''
    split = 'allure ' + ' generate ' + result_path + ' -o ' + html_path + ' --clean'
    os.system(split)  # system函数可以将字符串转化成命令在服务器上运行

    # 发送邮件
    if Config.send_email:
        send_mails()


def main():
    if os.path.exists(Config.CONFIG_PATH):
        os.remove(Config.CONFIG_PATH)
    parser = ArgumentParser()
    # 添加命令行参数  -c -p
    parser.add_argument("-c", "--cfg")
    parser.add_argument("-p", "--period")

    args = parser.parse_args()

    period = args.period
    config_path = "project/%s/configs" % period
    cfg = args.cfg
    if cfg is not None:
        shutil.copy(os.path.join(config_path, cfg), "config.ini")
    else:
        shutil.copy(os.path.join(config_path, "config.ini"), "config.ini")

    run(period)


if __name__ == "__main__":
    main()

# 命令行执行
# python run.py -p demo01 -c config-S.ini